package sortieren;

public interface Demonstrator{
  /**Teilt mit, dass die Zahlenmenge in einem (neuen) Anfangszustand vorliegt.
   * @param alg der Sortieralgorithmus, der den Vorgang verursacht hat.
   */
  void initAction(GetSwapSorter alg);

  /**Eine Vertauschung hat stattgefunden.
   * @param alg der Sortieralgorithmus, der den Vorgang verursacht hat.
   * @param i die Position einer Zahl.
   * @param j die Position des Tauschpartners.
   */
  void swapAction(GetSwapSorter alg, int i, int j);

  /**Eine Abfrage hat stattgefunden.
   * @param alg der Sortieralgorithmus, der den Vorgang verursacht hat.
   * @param i die Position der Zahl.
   */
  void getAction(GetSwapSorter alg, int i);

  /**Markiert eine Position. Bei Vertauschungen wird die Markierung nicht
   * mitgetauscht.
   * @param alg der Sortieralgorithmus, der den Vorgang verursacht hat.
   * @param pos die zu markierende Position in der Zahlenmenge.
   * @param wie, wenn mehrere Arten der Markierung (z.B. Farben) möglich
   * sind, kann mit diesem Argument eine davon ausgewählt werden. Der Wert 0
   * bedeutet, dass die Markierung als entfernt gilt.
   */  
  void markAction(GetSwapSorter alg, int pos, int wie);

  /**Das Sortieren ist abgeschlossen. Wenn noch etwas zu tun ist, kann es hier
   * getan werden.
   * @param alg der Sortieralgorithmus, der den Vorgang verursacht hat.
   */
  void readyAction(GetSwapSorter alg);
}
